home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_563 / kpri / src.lzh / prtinits.c < prev    next >
C/C++ Source or Header  |  1991-11-01  |  5KB  |  165 lines

  1. #include  "defs.h"
  2. #include  <devices/parallel.h>
  3. #include  <exec/devices.h>
  4.  
  5. Prototype           BOOL  is_nec(void);
  6. Prototype __regargs BOOL  init_par(PE *);   /* send printer setup codes */
  7. Prototype           void  close_prt(void);  /* close prt:  */
  8. Prototype           BOOL  init_prt(void);
  9.  
  10. Prototype FH *prt;       /* prt:    */
  11.  
  12. FH    *prt;              /* prt:    */
  13.  
  14.  
  15. /***********************  get_prefs()  **************************/
  16.  
  17. const UBYTE nec_pin[] = "Nec_Pinwriter";
  18.  
  19. BOOL
  20. is_nec(void)
  21. {
  22.   SHORT nec = TRUE;
  23.   PREF *prefs;
  24.   if  (prefs  = (PREF *)AllocMem(sizeof(PREF), MPC))
  25.   {
  26.     GetPrefs(prefs, sizeof(PREF));
  27.  
  28.     if  (!(stricmp(prefs->PrinterFilename, nec_pin) == 0))
  29.       nec = FALSE;
  30.  
  31.     FreeMem(prefs, sizeof(PREF));
  32.   }
  33.   else
  34.   {
  35.     quit  = TRUE;
  36.     autom = TRUE;
  37.   }
  38.  
  39.   return (nec);
  40. }
  41.  
  42. /***********************  init_prt(void)  ****************************/
  43. const UBYTE printerror[] = "***Error : can't access printer !";
  44. const UBYTE prtstr[]     = "prt:";
  45.  
  46. BOOL
  47. init_prt(void)
  48. {
  49.   if (!prt)
  50.     if (!(prt = (FH *) Open(prtstr, MODE_NEWFILE)))
  51.     {
  52.       do_request(printerror, resume, 0);
  53.       return (FALSE);                   /* no printer  */
  54.     }
  55.   return (TRUE);
  56. }
  57.  
  58. /***********************  close_prt(void)  **************************/
  59. void
  60. close_prt(void)
  61. {
  62.   Close(prt);
  63.   prt = NULL;
  64. }
  65.  
  66. /***********************  init_par(PE *)  **************************/
  67.  
  68.                     /* RESET USA      */
  69. #define RESET       "\x1C\x40\x1B\x52\x00"
  70. #define SIXSIX      "\x1B\x32"
  71. #define EIGHTEIGHT  "\x1B\x30"
  72.                     /* PICA  NLQ LM RM */
  73. #define EIGHTZERO   "\x1B\x50\x1B\x78\x01\x1B\x6C\x00\x1B\x51\x50"
  74.                     /* ELITE DRAFT LM RM FAST */
  75. #define NINESIX     "\x1B\x4D\x1B\x78\x00\x1B\x6C\x10\x1B\x51\x60\x1C\x53\x01"
  76.                     /* COND DRAFT LM RM */
  77. #define ONETHREETWO "\x1B\x50\x0F\x1B\x78\x00\x1B\x6C\x20\x1B\x51\x90"
  78.  
  79.  
  80. const UBYTE parname[]     = "parallel.device";
  81. const UBYTE erroronline[] = "***Error : printer not online !";
  82. const UBYTE retry[]       = "retry";
  83.  
  84. const UBYTE reset[]       = RESET;
  85. const UBYTE *lines[2]     = { SIXSIX, EIGHTEIGHT };
  86. const UBYTE *chars[3]     = { EIGHTZERO, NINESIX, ONETHREETWO };
  87.  
  88. __regargs BOOL
  89. init_par(PE *pe)
  90. {
  91.   if (prt)                              /* otherwise gurus !   */
  92.     close_prt();
  93.  
  94.   struct MsgPort  *pardev_port = NULL;
  95.   struct IOExtPar *pardev_req  = NULL;
  96.   BOOL   init = FALSE;
  97.  
  98.   if (pardev_port = (struct MsgPort *) CreatePort(NULL, NULL))
  99.   {
  100.     if (pardev_req = (struct IOExtPar *) CreateExtIO(pardev_port,
  101.                                                 sizeof(struct IOExtPar)))
  102.     {
  103.       if (!(init = OpenDevice(parname, NULL, pardev_req, NULL)))
  104.       {
  105.         for (int i = 1; i <= 3; ++i)       /* three times request "online" */
  106.         {
  107.           pardev_req->IOPar.io_Command = PDCMD_QUERY;   /* is it online ?? */
  108.           DoIO(pardev_req);
  109.                                         /* must be selected and not busy */
  110.           if ((((UBYTE) pardev_req->io_Status & (UBYTE) IOPTF_PARSEL) ==
  111.                (UBYTE) IOPTF_PARSEL) &&
  112.               (((UBYTE) pardev_req->io_Status & (UBYTE) IOPTF_PARBUSY) !=
  113.                (UBYTE) IOPTF_PARBUSY))
  114.           {
  115.             pardev_req->IOPar.io_Command = CMD_WRITE;
  116.             for (int com = 1; com <= 3; ++com)    /*  collect command string  */
  117.             {
  118.               switch(com)
  119.               {
  120.               case 1:
  121.                 pardev_req->IOPar.io_Data   = reset;
  122.                 pardev_req->IOPar.io_Length = 5;
  123.                 break;
  124.  
  125.               case 2:
  126.                 pardev_req->IOPar.io_Data   = lines[pe->pagesize];
  127.                 pardev_req->IOPar.io_Length = 2;
  128.                 break;
  129.  
  130.               case 3:
  131.                 pardev_req->IOPar.io_Data   = chars[pe->linelength];
  132.                 if ((pe->linelength == 1) && is_nec()) /* highspeed */
  133.                   pardev_req->IOPar.io_Length = 14;
  134.                 else
  135.                 {
  136.                   if (pe->linelength == 2)
  137.                     pardev_req->IOPar.io_Length = 12;
  138.                   else
  139.                     pardev_req->IOPar.io_Length = 11;
  140.                 }
  141.  
  142.               default:
  143.                 break;
  144.               }               /*  switch com */
  145.  
  146.               DoIO(pardev_req);
  147.               Delay(10);      /*  wait for mechanicsm */
  148.             }                 /*  ... end of for (com) loop  */
  149.             init = TRUE;
  150.             break;            /*  ... out of for (i) loop */
  151.           }
  152.           else
  153.             do_request(erroronline, retry, 0);
  154.         }                     /*  ... end of for (i) loop */
  155.         CloseDevice(pardev_req);
  156.       }
  157.       DeleteExtIO(pardev_req);
  158.     }
  159.     DeletePort(pardev_port);
  160.   }
  161.   return (init);
  162. }
  163.  
  164.  
  165.